#生成人脸特征点数组并进行存储
#获取面部68个特征点
#利用训练好的人脸68点特征检测器，进行人脸面部轮廓特征提取
import cv2
import dlib
import os
import sys

output_dir = "points"
origin_dir = "high_dpi_faces"
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 使用训练好的68个特征点模型
predictor_path = "shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(predictor_path)

# 正向人脸检测器将图像
detector = dlib.get_frontal_face_detector()

for filenames in os.listdir(origin_dir):
    # 读取图片
    img = cv2.imread(origin_dir + '/' +filenames)
    # 转换为灰阶图片
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 使用检测器来检测图像中的人脸
    faces = detector(gray, 1)
    # 打印结果
    #print("人脸数: ", len(faces))
    if (len(faces))!=0:
        for i, face in enumerate(faces):
            print("第", i+1, "个人脸的矩形框坐标：\n","left:", face.left(), "right:", face.right(), "top:", face.top(), "bottom:", face.bottom())
            # 获取人脸特征点
            shape = predictor(img, face)
            print("第", i+1, '个人脸特征点:')
            print(shape.parts())
    else:
        print("未检测到人脸！")
        os.remove(origin_dir + '/' +filenames)